package com.zhong.reflect;

import com.zhong.model.User;
import org.junit.Test;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**
 *  反射--方法
 * @author:yanglin on 2018/6/17.
 */
public class MethodDemo {

    @Test
    public void demo1(){
        Class<User> clazz = User.class;
        Method[] methods = clazz.getMethods();
    }

    @Test
    public void demo2(){
        Class<User> clazz = User.class;
        Method[] methods = clazz.getDeclaredMethods();
    }

    // 方法的调用
    //1.得到方法： clazz.getMethod()
    //2.调用方法： clazz.invoke();
    @Test
    public void demo3() throws NoSuchMethodException, IllegalAccessException, InstantiationException, InvocationTargetException {
        Class<User> clazz = User.class;
        //name:           方法名
        //parameterTypes: 参数类型
        Method setName = clazz.getMethod("setName", String.class);
        User obj = clazz.newInstance();
        //方法调用: 对象实例， 参数
        setName.invoke(obj, "小米");
        //取值
        Method getName = clazz.getMethod("getName");
        Object invoke = getName.invoke(obj);
        System.err.println(invoke);
    }
}
